<?php

/**
 * This is the model class for table "{{article}}".
 *
 * The followings are the available columns in table '{{article}}':
 * @property string $article_id
 * @property string $title
 * @property string $content
 * @property integer $created_at
 * @property integer $hits
 * @property string $lesson_id
 *
 * The followings are the available model relations:
 * @property Lesson $lesson
 * @property Learn[] $learns
 */
class Article extends CActiveRecord
{
  /**
   * @return string the associated database table name
   */
  public function tableName()
  {
    return '{{article}}';
  }

  public function defaultScope()
  {
    return array(
        'alias' => 'article'
    );
  }


  /**
   * @return array validation rules for model attributes.
   */
  public function rules()
  {
    // NOTE: you should only define rules for those attributes that
    // will receive user inputs.
    return array(
        array('title, content, created_at, lesson_id', 'required'),
        array('created_at, hits', 'numerical', 'integerOnly' => true),
        array('title', 'length', 'max' => 128),
        array('lesson_id', 'length', 'max' => 10),
      // The following rule is used by search().
      // @todo Please remove those attributes that should not be searched.
        array('article_id, title, content, created_at, hits, lesson_id', 'safe', 'on' => 'search'),
    );
  }

  /**
   * @return array relational rules.
   */
  public function relations()
  {
    // NOTE: you may need to adjust the relation name and the related
    // class name for the relations automatically generated below.
    return array(
        'lesson' => array(self::BELONGS_TO, 'Lesson', 'lesson_id'),
        'learns' => array(self::HAS_MANY, 'Learn', 'article_id'),
    );
  }

  /**
   * @return array customized attribute labels (name=>label)
   */
  public function attributeLabels()
  {
    return array(
        'article_id' => 'Article',
        'title' => '标题',
        'content' => '内容',
        'created_at' => 'Created At',
        'hits' => 'Hits',
        'lesson_id' => '课程编号',
    );
  }

  /**
   * Retrieves a list of models based on the current search/filter conditions.
   *
   * Typical usecase:
   * - Initialize the model fields with values from filter form.
   * - Execute this method to get CActiveDataProvider instance which will filter
   * models according to data in model fields.
   * - Pass data provider to CGridView, CListView or any similar widget.
   *
   * @return CActiveDataProvider the data provider that can return the models
   * based on the search/filter conditions.
   */
  public function search()
  {
    // @todo Please modify the following code to remove attributes that should not be searched.

    $criteria = new CDbCriteria;

    $criteria->compare('article_id', $this->article_id, true);
    $criteria->compare('title', $this->title, true);
    $criteria->compare('content', $this->content, true);
    $criteria->compare('created_at', $this->created_at);
    $criteria->compare('hits', $this->hits);
    $criteria->compare('lesson_id', $this->lesson_id, true);

    return new CActiveDataProvider($this, array(
        'criteria' => $criteria,
    ));
  }

  /**
   * Returns the static model of the specified AR class.
   * Please note that you should have this exact method in all your CActiveRecord descendants!
   * @param string $className active record class name.
   * @return Article the static model class
   */
  public static function model($className = __CLASS__)
  {
    return parent::model($className);
  }

  public function onBeforeValidate($event)
  {
    if ($this->isNewRecord) {
      $this->created_at = time();
      $this->hits = 0;
    }
    parent::onBeforeValidate($event); // TODO: Change the autogenerated stub
  }

}
